<?php
Class User{
	public static function Add(){
		$status = array('content'=>NULL,'color'=>"red");
		$request = getRequest::getInstance();
			if($request->isPost()==1){
				$post = $request->postParams();
					if(!empty($post['name']) && !empty($post['login']) && !empty($post['pass1']) && !empty($post['pass2']) && !empty($post['email'])){
						if($post['pass1'] == $post['pass2']){

							$result = ORM::factory()->prepare("SELECT count(id) FROM `users` WHERE `username`='".$post['login']."' || `email`='".$post['email']."'")->getResult();

							if($result[0]['count(id)']==0){
								$orm = ORM::factory('users');
								$orm->username = $post['login'];
								$orm->password = md5($post['pass1']);
								$orm->real_name = $post['name'];
								$orm->email = $post['email'];
								$orm->role = $post['role'];
								$orm->activ = 1;
								$orm->flush();
								
								$status['content'] = "Користувача успішно додано";
								$status['color'] = "green";
							}else{
									$status['content'] = "Користувач з таким e-mail вже існує";
							}
						}else{
							$status['content'] = "Введені паролі не співпадають!";
						}
					}else{
						$status['content'] = "Ви не ввели одне з обовязкових полів";
					}
			}
			return $status;
	}

	public static function Edit(){
		$status = array('content'=>NULL,'color'=>"red");
		$request = getRequest::getInstance();

                        $acl = new Df_acl;
                        $acl->SetAclTableName("acl");
                        //Читаем ID групу пользователя
                        $role = Df_Auth::read("role");
                        $acl->addRole($role);
                        $acl->add_Resource("USERS");
                        //Права на редактирование пользователей
                        $access = array();
                        $acl->add_access("3");
                        $access['allow_edit'] = $acl->allow();
                        
                $data = NULL;
                if($access['allow_edit'] == true){
                            //Особые права
                            $acl->add_access("6");
                            $access['allow_super'] = $acl->allow();

                    if($request->isPost()==1){
                         $post = $request->postParams();
                         $data = $post;
                         $title = "Редагування профілю користувача ".$post['real_name'];

                        if(isset($post['username']) && isset($post['email'])){
                                 if(isset($post['npass'])){
                                    if(isset($post['pass1']) && isset($post['pass2']) && $post['pass1']==$post['pass2']){
                                        ORM::factory('users')->prepare("UPDATE `users` SET `username`='".$post['username']."', `email`='".$post['email']."', `role`='".$post['role']."', `password`='".md5($post['pass1'])."' WHERE`id`='".$post['id']."'")->execute();
                                        $status['content'] = "Нові дані збережено";
                                        $status['color'] = "green";
                                    }else{
                                        $status['content'] = "Введені паролі не співпадають";
                                    }
                                 }else{
                                     ORM::factory('users')->prepare("UPDATE `users` SET `username`='".$post['username']."', `email`='".$post['email']."', `role`='".$post['role']."'  WHERE`id`='".$post['id']."'")->execute();
                                     $status['content'] = "Нові дані збережено";
                                     $status['color'] = "green";
                                 }
                             }else{
                                 $status['content'] = "Ви не ввели одне з обовязкових полів";
                             }
                        }else{
                                $id = $request->getVar("id", "GET");
                                $data = ORM::factory('users')->Select("id, username, real_name, email, role")->Where("id", $id)->find_all();
                                $data = $data[0];

                                //Проверяем уровень пользователя. Зделанно отдельным запросом в связи с тем что если ACL для данного пользователя не прописано то JOIN ничего не вернет
                                $Rights = ORM::factory('acl')->Select("Rights")->Where(array("Role"=>$data['role'], "Modul"=>"GROUPS"))->find_all();
                                $Rights = $Rights[0]['Rights'];

                                //Получаем ID текущего пользователя. Для того чтоб пользователь мог отредактировать свою запись
                                $auth_id = Df_Auth::read("id");

                                //Проверяем права
                               if($Rights>=5 && $access['allow_super']==true || $Rights<5 || $auth_id == $id){
                                  $title = "Редагування профілю користувача ".$data['real_name'];
                               }else{
                                  $title = "Доступ заборонено!";
                                  $data = NULL;
                               }
                        }
                }else{
                    $title = "Доступ заборонено!";
                    $status['content'] = "Доступ заборонено!";
                }
	return array('data'=>$data,'title'=>$title,'status'=>$status,'access'=>$access);
	}

    public static function Login(){
			$request = getRequest::getInstance();
			if($request->isPost()==1){
				$login = $request->getVar("login", "POST");
				$password = $request->getVar("password", "POST");

				if(!empty($login) && !empty($password)){
					$login_error = "";

					$authAdapter = new Auth_Adapter_DbTable;

					$authAdapter->setTableName('users');

					$authAdapter->setGroupTableName('groups');

					$authAdapter->setIdentityColumn('username');

					$authAdapter->setCredentialColumn('password');

					$authAdapter->setIdentity($login);

					$authAdapter->setCredential($password, 1);

					$authAdapter->isUserActiv();

					if($authAdapter->isValid()==1){
						$data = $authAdapter->getResultRow("password");

						Df_Auth::write($data);
						header("location: /admin.html");
						exit();
					}else{
						$login_error = "Невірний логін або пароль";
					}
				}elseif(!empty($login) && empty($password)){
					$login_error = "Ви не ввели пароль!";
				}elseif(empty($login) && !empty($password)){
					$login_error = "Ви не ввели пароль!";
				}
			}else{
				$login_error = "";
			}
			return $login_error;
	}

}
